#pragma once

#include <queue>

namespace GPUCC
{
	template<typename Type>
	class Queue
	{
	public:
		Queue()
		{
		}

		~Queue()
		{
		}

		void Push(const Type& Value)
		{
			this->m_Queue.push(Value);
		}

		Type Pop()
		{
			Type value = this->m_Queue.front();
			this->m_Queue.pop();

			return (value);
		}

		Type& Peek()
		{
			return (this->m_Queue.front())
		}

		bool Empty()
		{
			return (this->m_Queue.empty());
		}

		unsigned int Size()
		{
			return (this->m_Queue.size())
		}

	private:
		std::queue<Type> m_Queue;
	};
}